package com.kexilo.system.security.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kexilo.core.security.domain.SysLogininfor;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 系统访问日志情况信息 数据层
 * 
 * @author Kexilo
 */
@Mapper
public interface SysLogininforMapper extends BaseMapper<SysLogininfor> {
    
    /**
     * 新增系统登录日志
     * 
     * @param logininfor 访问日志对象
     */
    void insertLogininfor(SysLogininfor logininfor);

    /**
     * 查询系统登录日志集合
     * 
     * @param logininfor 访问日志对象
     * @return 登录记录集合
     */
    List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);

    /**
     * 批量删除系统登录日志
     * 
     * @param infoIds 需要删除的登录日志ID
     * @return 结果
     */
    int deleteLogininforByIds(Long[] infoIds);

    /**
     * 清空系统登录日志
     */
    void cleanLogininfor();

    /**
     * 根据用户名查询最近登录记录
     * 
     * @param userName 用户名
     * @param limit 限制条数
     * @return 登录记录
     */
    List<SysLogininfor> selectRecentLoginByUserName(String userName, int limit);

    /**
     * 查询用户失败登录次数
     * 
     * @param userName 用户名
     * @param hours 小时数
     * @return 失败次数
     */
    int selectFailureCountByUserName(String userName, int hours);

    /**
     * 查询异地登录记录
     * 
     * @param userName 用户名
     * @param ipaddr IP地址
     * @param hours 小时数
     * @return 登录记录数
     */
    int selectRemoteLoginCount(String userName, String ipaddr, int hours);

    /**
     * 根据设备指纹查询登录记录
     * 
     * @param deviceFingerprint 设备指纹
     * @param userName 用户名
     * @return 登录记录数
     */
    int selectLoginCountByDevice(String deviceFingerprint, String userName);
}
